<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="QOdeh" id="QOdeh"><span data-lake-id="ua24a40e7" id="ua24a40e7">典型回答</span></h1>
  <p data-lake-id="uaa2a6c23" id="uaa2a6c23"><br></p>
  <p data-lake-id="uca4c516d" id="uca4c516d"><span data-lake-id="u6c169675" id="u6c169675">Innodb是MySQL的存储引擎，MySQL是一种关系型数据库，而MongoDB是非关系型数据库。</span><strong><span data-lake-id="u0ec09890" id="u0ec09890">关系型和非关系型数据库比较大的区别就是关系型数据库有大量的范围查询，而非关系型数据库基本都是单条查询。</span></strong></p>
  <p data-lake-id="u15af8921" id="u15af8921"><span data-lake-id="u28a48cee" id="u28a48cee">​</span><br></p>
  <p data-lake-id="u6e66f326" id="u6e66f326"><span data-lake-id="ub8d5f9cd" id="ub8d5f9cd">还有一个区别就是，</span><strong><span data-lake-id="u6c0aa88d" id="u6c0aa88d">InnoDB引擎下的MySQL的数据是存储在磁盘上的，而MongoDB的数据是存储在内存上的。</span></strong></p>
  <p data-lake-id="u6c29263a" id="u6c29263a"><span data-lake-id="u80939c89" id="u80939c89">​</span><br></p>
  <p data-lake-id="ubd3a907b" id="ubd3a907b"><span data-lake-id="u4b5eb2ef" id="u4b5eb2ef">接着说一下</span><strong><span data-lake-id="u4f4c55c5" id="u4f4c55c5">B树和B+树的区别，其实他们的主要区别就在于B+树的叶子节点之间通过双向指针链接进而形成了链表，所以B+树在范围查询时更加高效。</span></strong></p>
  <p data-lake-id="u24b48571" id="u24b48571"><span data-lake-id="u21d8ae41" id="u21d8ae41">​</span><br></p>
  <p data-lake-id="uc0f303f7" id="uc0f303f7"><span data-lake-id="ueb85b069" id="ueb85b069">​</span><br></p>
  <p data-lake-id="ucf85f818" id="ucf85f818"><span data-lake-id="u8441048c" id="u8441048c">一般来说，</span><strong><span data-lake-id="u0e17e60e" id="u0e17e60e">B+树在磁盘存储和范围查询方面具有较高的效率，</span></strong><span data-lake-id="u965222b6" id="u965222b6">因为B+树在范围查询时可以通过顺序遍历叶子节点来获取连续的数据，从而提高了查询的效率。</span><strong><span data-lake-id="ub729f82e" id="ub729f82e">而B树更适合内存存储和随机访问的场景，</span></strong><span data-lake-id="ubf083948" id="ubf083948">因为B树的特点是叶子节点和非叶子节点都包含键值和数据信息。这种设计使得B树在内存中的访问更加高效，因为在内存中可以直接访问数据，而不需要再进行一次磁盘访问。</span></p>
  <p data-lake-id="u80484168" id="u80484168"><span data-lake-id="ue154c412" id="ue154c412">​</span><br></p>
  <p data-lake-id="u8c6fa9df" id="u8c6fa9df"><span data-lake-id="ud9f3b6da" id="ud9f3b6da">所以说，如果是磁盘查询，一定是B+树效率更高，这是一定的。所以这是MySQL用B+树的原因！</span></p>
  <p data-lake-id="u64d9cc0d" id="u64d9cc0d"><span data-lake-id="ue8d52a70" id="ue8d52a70">​</span><br></p>
  <p data-lake-id="u17e0d0f6" id="u17e0d0f6"><span data-lake-id="u4be5cb8c" id="u4be5cb8c">但是如果是内存查询，B树一定就比B+树好吗？虽然他可能会因为非叶子节点上也有数据而减少查询次数，但是B+树相比B树来说，他还有一个同样的数据量情况下，他的高度可能更低的优点呢。。。</span></p>
  <p data-lake-id="ue85d335d" id="ue85d335d"><span data-lake-id="u99a74d34" id="u99a74d34">​</span><br></p>
  <p data-lake-id="u9fe0a2db" id="u9fe0a2db"><span data-lake-id="ubc471539" id="ubc471539">所以，在内存查询上，并不能说明B树就一定比B+数的效率要高。</span></p>
  <p data-lake-id="ua73f6386" id="ua73f6386"><span data-lake-id="u3d6e8318" id="u3d6e8318">​</span><br></p>
  <p data-lake-id="ue3964118" id="ue3964118"><span data-lake-id="ucd6e1079" id="ucd6e1079">那么，为啥MongoDB还要用B树呢？其实，MongoDB在旧版本中用的确实是B树，但是在 MongoDB 3.2 以后，已经采用 WiredTiger 作为默认的存储引擎了。</span></p>
  <p data-lake-id="u91e04916" id="u91e04916"><span data-lake-id="uec1dff0d" id="uec1dff0d">​</span><br></p>
  <p data-lake-id="u0c8674c0" id="u0c8674c0"><strong><u><span data-lake-id="uff289b11" id="uff289b11">WiredTiger的默认的数据结构已经是B+树了 （</span></u></strong><a href="https://source.wiredtiger.com/10.0.0/tune_page_size_and_comp.html" target="_blank" data-lake-id="u91d4947a" id="u91d4947a"><strong><u><span data-lake-id="u2b7e5703" id="u2b7e5703">https://source.wiredtiger.com/10.0.0/tune_page_size_and_comp.html</span></u></strong></a><strong><u><span data-lake-id="u538a0d32" id="u538a0d32"> ）!</span></u></strong></p>
  <p data-lake-id="u8754638a" id="u8754638a"><span data-lake-id="u55a32e4b" id="u55a32e4b">​</span><br></p>
  <p data-lake-id="ua799c31f" id="ua799c31f"><span data-lake-id="u4f4ee69d" id="u4f4ee69d">​</span><br></p>
  <p data-lake-id="u4ba8a21e" id="u4ba8a21e"><span data-lake-id="uc0a6e2d8" id="uc0a6e2d8">​</span><br></p>
 </body>
</html>